name: CI - E2E - 3rd party donation tests

# These are only run on prod-* branches to test the 3rd party donation flow

on:
  push:
    branches:
      - 'prod-**'
    paths-ignore:
      - 'docs/**'
  # to test this ad-hoc
  workflow_dispatch:

jobs:
  do-everything:
    name: Build & Test
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        node-version: [20.x]
    services:
      mongodb:
        image: mongo:4.4
        ports:
          - 27017:27017
      # We need mailhog to catch any emails the api tries to send.
      mailhog:
        image: mailhog/mailhog
        ports:
          - 1025:1025

    steps:
      - name: Checkout Source Files
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

      - name: Checkout client-config
        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
        with:
          repository: freeCodeCamp/client-config
          path: client-config

      - name: Setup pnpm
        uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d #v3.0.0
        with:
          version: 8

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
        with:
          node-version: ${{ matrix.node-version }}
          # cypress-io/github-action caches the store, so we should not cache it
          # here.

      - name: Set freeCodeCamp Environment Variables
        run: |
          sed '/STRIPE/d; /PAYPAL/d;' sample.env > .env
          echo 'STRIPE_PUBLIC_KEY=${{ secrets.STRIPE_PUBLIC_KEY }}' >> .env
          echo 'STRIPE_SECRET_KEY=${{ secrets.STRIPE_SECRET_KEY }}' >> .env
          echo 'PAYPAL_CLIENT_ID=${{ secrets.PAYPAL_CLIENT_ID }}' >> .env

      - name: Install and Build
        run: |
          pnpm install
          pnpm run build
      - name: Seed Database
        run: pnpm run seed
      - name: Move serve.json to Public Folder
        run: cp client-config/serve.json client/public/serve.json

      # start-ci uses pm2, so it needs to be installed globally
      - name: Install pm2
        run: npm i -g pm2

        # In our cypress config, we default to the cypress/e2e/default directory.
        # We need to change this to cypress/e2e/ for the specific tests we are running
        # in this workflow.
        #
      - name: Adjust the Cypress Config
        run: |
          sed -i 's#cypress/e2e/default/#cypress/e2e/#g' cypress.config.js

      - name: Cypress run
        uses: cypress-io/github-action@v6
        with:
          record: ${{ env.CYPRESS_RECORD_KEY != 0 }}
          start: pnpm run start-ci
          wait-on: http://localhost:8000
          wait-on-timeout: 1200
          config: baseUrl=http://localhost:8000
          browser: chrome
          spec: 'cypress/e2e/third-party/donate-page.ts'
